<?php
     /**
      * Created by JetBrains PhpStorm.
      * User: taoqili
      * Date: 11-12-28
      * Time: 上午9:54
      * To change this template use File | Settings | File Templates.
      */
     exit;
    header('Content-Type: text/html; charset=utf-8');
    error_reporting(E_ERROR | E_WARNING);
    //远程抓取图片配置
    $config = array(
        'savePath' => 'upload/',            //保存路径
        'allowFiles' => array('.gif', '.png', '.jpg', '.jpeg', '.bmp'), //文件允许格式
        'maxSize' => 3000,                    //文件大小限制，单位KB
    );
    $uri = htmlspecialchars($_POST[ 'upfile' ]);
    $uri = str_replace('&amp;', '&', $uri);
    getRemoteImage($uri, $config);

    /**
     * 远程抓取.
     *
     * @param $uri
     * @param $config
     */
    function getRemoteImage($uri, $config)
    {
        //忽略抓取时间限制
        set_time_limit(0);
        //ue_separate_ue  ue用于传递数据分割符号
        $imgUrls = explode('ue_separate_ue', $uri);
        $tmpNames = array();
        foreach ($imgUrls as $imgUrl) {
            //http开头验证
            if (strpos($imgUrl, 'http') !== 0) {
                array_push($tmpNames, 'error');
                continue;
            }
            //获取请求头
            $heads = get_headers($imgUrl);
            //死链检测
            if (!(stristr($heads[ 0 ], '200') && stristr($heads[ 0 ], 'OK'))) {
                array_push($tmpNames, 'error');
                continue;
            }

            //格式验证(扩展名验证和Content-Type验证)
            $fileType = strtolower(strrchr($imgUrl, '.'));
            if (!in_array($fileType, $config[ 'allowFiles' ]) || stristr($heads[ 'Content-Type' ], 'image')) {
                array_push($tmpNames, 'error');
                continue;
            }

            //打开输出缓冲区并获取远程图片
            ob_start();
            $context = stream_context_create(
                array(
                    'http' => array(
                        'follow_location' => false, // don't follow redirects
                    ),
                )
            );
            //请确保php.ini中的fopen wrappers已经激活
            readfile($imgUrl, false, $context);
            $img = ob_get_contents();
            ob_end_clean();

            //大小验证
            $uriSize = strlen($img); //得到图片大小
            $allowSize = 1024 * $config[ 'maxSize' ];
            if ($uriSize > $allowSize) {
                array_push($tmpNames, 'error');
                continue;
            }
            //创建保存位置
            $savePath = $config[ 'savePath' ];
            if (!file_exists($savePath)) {
                mkdir("$savePath", 0777);
            }
            //写入文件
            $tmpName = $savePath.rand(1, 10000).time().strrchr($imgUrl, '.');
            try {
                $fp2 = @fopen($tmpName, 'a');
                fwrite($fp2, $img);
                fclose($fp2);
                array_push($tmpNames,  $tmpName);
            } catch (Exception $e) {
                array_push($tmpNames, 'error');
            }
        }
        /*
         * 返回数据格式
         * {
         *   'url'   : '新地址一ue_separate_ue新地址二ue_separate_ue新地址三',
         *   'srcUrl': '原始地址一ue_separate_ue原始地址二ue_separate_ue原始地址三'，
         *   'tip'   : '状态提示'
         * }
         */
        echo "{'url':'".implode('ue_separate_ue', $tmpNames)."','tip':'远程图片抓取成功！','srcUrl':'".$uri."'}";
    }
